home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Collections: Bavarian
/
Bavarian #097 (19xx)(APS Electronic).zip
/
Bavarian #097 (19xx)(APS Electronic).adf
/
MainII
(
.txt
)
< prev
next >
Wrap
AmigaBASIC Source Code
|
1996-12-24
|
44KB
|
1,906 lines
'
' AMIGA - MONOPOLY
' ================
'
' by T.Riegel S. Grunwald
' Dorfstr. 52 Schillerstr. 25
' 8034 Germering 8034 Germering
' Tel.: 8411183 Tel.: 846893
'
' for your Amiga 500 (1MB) / 1000 (1MB) / 2000
'
' ACBM-Loading routine of DExtras V1.2
'
Vorbereitungen:
ON ERROR GOTO fehler
SCREEN 1,640,256,4,2
WINDOW 3,"",,16,1
PALETTE 10,1,1,1
COLOR 10 : LOCATE 14,30 : PRINT "Bitte warten..."
DEFINT a-z:DEFLNG ko,mi,bli,hp,aus
FOR a=1 TO 4
MENU a,0,1,""
NEXT a
DIM fe$(40),bf(40),fes(40),pr(40),zg(28),hz(40),mi(240),hy(40),fa(44),gz(40)
DIM sp1(3882),sp2(4059),sp3(10452),sp4(4059),sp5(59),sp6(291),me(40),geha(40)
DIM bPlane&(5), cTabWork%(32), cTabSave%(32)
DECLARE FUNCTION AllocMem& LIBRARY
DECLARE FUNCTION xOpen& LIBRARY
DECLARE FUNCTION xRead& LIBRARY
DECLARE FUNCTION xWrite& LIBRARY
LIBRARY ":dos.library"
LIBRARY ":exec.library"
LIBRARY ":graphics.library"
GOSUB Stringseinlesen
RANDOMIZE TIMER
ek = INT(RND*10)+1
gk = INT(RND*10)+1
bli= 12574721
filename$(3)="amiga-monopoly:mono3.snd"
a=3:GOSUB SAMPLELoader
Vorspann:
CLS
acbmname$="amiga-monopoly:monopoly-titel.acbm"
GOSUB acbmloader
num=3:peri=180:GOSUB Soundplayer
CALL FreeMem&(Adresse&(3),Laenge&(3))
ms=0
ON MOUSE GOSUB Maus.Vorsp
MOUSE ON
WHILE ms=0
kno = MOUSE(0)
a$ = INKEY$
IF a$>"1" AND a$<"7" THEN ms=1:mi=VAL(a$)
WEND
MOUSE OFF
GOTO Namen
Maus.Vorsp:
yma=MOUSE(2)
xma=MOUSE(1)
IF yma>106 AND yma<126 THEN
IF xma<205 AND xma>152 THEN mi=2:ms=1
IF xma<265 AND xma>212 THEN mi=3:ms=1
IF xma<325 AND xma>272 THEN mi=4:ms=1
IF xma<385 AND xma>332 THEN mi=5:ms=1
IF xma<445 AND xma>392 THEN mi=6:ms=1
END IF
RETURN
Namen:
PAINT (35+mi*60,110),7,10
WINDOW 4,,(20,89)-(610,100+mi*8),0,1
COLOR 10
FOR a = 1 TO mi
COLOR a+1
LOCATE 1+a,22 : PRINT "Name von Spieler";a
LOCATE 1+a,40 : INPUT na$(a)
na$(a)=LEFT$(na$(a),13)
fes(a)=1 : ko(a)=30000
NEXT
WINDOW CLOSE 4
FOR a = 0 TO 211 STEP 2
LINE (0,a)-(640,a),0
NEXT
FOR a = 211 TO 0 STEP -2
LINE (0,a)-(640,a),0
NEXT
FOR a=0 TO 15:PALETTE a,0,0,0:NEXT
filename$(1)="amiga-monopoly:mono1.snd"
a=1:GOSUB SAMPLELoader
filename$(2)="amiga-monopoly:mono2.snd"
a=2:GOSUB SAMPLELoader
Hauptprogramm:
gg = 0
IF pa = 0 THEN
dr = dr + 1
IF socken=1 THEN GOSUB sound2
socken=1
END IF
miet = 0
IF dr>mi THEN dr=1
wu = INT(RND*6)+1
we = INT(RND*6)+1 : nn=0
IF gef(dr) = 1 THEN
rig(dr) = rig(dr)+1
IF rig(dr) = 3 THEN rig(dr) = 0 : gef(dr) = 0 : ko(dr) = ko(dr)-1000
END IF
IF wu = we THEN pa = pa+1 :ELSE pa=0
IF pa = 1 AND gef (dr) = 1 THEN gef(dr)=0 : fg=1
IF pa = 3 THEN gef(dr) = 1 : fes(dr)=11
IF gef(dr) = 0 THEN fes(dr) = fes(dr)+we+wu
IF fes(dr) > 40 THEN fes(dr) = fes(dr)-40 : ko(dr)=ko(dr)+4000
IF fes(dr) = 1 THEN ko(dr) = ko(dr)+4000
IF fes(dr) = 5 THEN ko(dr) = ko(dr)-4000
IF fes(dr) = 31 THEN gef(dr) = 1
IF fes(dr) = 39 THEN ko(dr) = ko(dr)-2000
GOSUB bpBerechnung
Hauptmenue:
CLS
GOSUB Kont
COLOR dr+1
LOCATE 5,23: PRINT "Spieler : " na$(dr)
COLOR 1
LOCATE 6,23: PRINT "Gewürfelte Zahl :";wu+we;
IF pa > 0 THEN PRINT "(Pasch)";
IF pa = 3 THEN pa = 0 : PRINT " -> Gefängnis"
IF fg = 1 THEN fg = 0 : PRINT " -> Freigewürfelt"
LOCATE 7,23 : PRINT "Spielfeld : ";fe$(fes(dr));
IF gef(dr) = 1 AND fes(dr) = 31 THEN PRINT " -> Gefängnis" : fes(dr)=11
LOCATE 8,23 : PRINT"Vermögen :";ko(dr)
IF bf(fes(dr))>0 AND bf(fes(dr))<>dr AND miet=0 AND gg=0 AND hy(fes(dr))=0 THEN Mieten
IF ko(dr)<0 THEN Ende
GOSUB Spielplan
LOCATE 11,1
COLOR 5
PRINT TAB(27) "Nächster Zug............1"
PRINT
PRINT TAB(27) "Geschäfte führen........2"
PRINT
PRINT TAB(27) "Ihr Besitz..............3"
PRINT
PRINT TAB(27) "Grundstück kaufen.......4"
PRINT
PRINT TAB(27) "Bauen...................5"
PRINT
PRINT TAB(27) "Diskette................6"
IF nn=0 THEN
IF fes(dr)=8 OR fes(dr)=23 OR fes(dr)=37 THEN Ereigniskarten
IF fes(dr)=3 OR fes(dr)=18 OR fes(dr)=34 THEN Gemeinschaftskarten
END IF
h=11:ap=6:GOSUB Menkast
Abfrage:
IF a = 1 THEN Hauptprogramm
IF a = 2 THEN Geschaefte
IF a = 3 THEN Besitz
IF a = 4 THEN Grundstueck
IF a = 5 THEN Bauen
IF a = 6 THEN Diskette
Geschaefte:
CLS
COLOR 3
LOCATE 2,24 : PRINT "G E S C H Ä F T E F Ü H R E N"
GOSUB Linie
COLOR 5
LOCATE 8,27
GOSUB Kont
PRINT "Grundstückhandel.......1"
PRINT
PRINT TAB(27) "Hypotheken.............2"
PRINT
PRINT TAB(27) "Freikartenhandel.......3"
PRINT
PRINT TAB(27) "Häuser verkaufen.......4"
PRINT
PRINT TAB(27) "Freikaufen.............5"
PRINT
PRINT TAB(27) "Zum Hauptmenü..........6"
h=8:ap=6
GOSUB Menkast
IF a = 1 THEN Grundstueckhandel
IF a = 2 THEN Hypotheken
IF a = 3 THEN Freikartenhandel
IF a = 4 THEN Haeuserverk
IF a = 5 THEN Freikaufen
IF a = 6 THEN Hauptmenue
Grundstueckhandel:
GOSUB bpBerechnung
CLS
COLOR 3
LOCATE 2,21 : PRINT "G R U N D S T Ü C K H A N D E L"
GOSUB Linie
COLOR 4
LOCATE 5,17 : PRINT "Spieler Nummer Vermögen"
PRINT
COLOR 1
FOR a = 1 TO mi
PRINT TAB(17) ;na$(a);TAB(37);a;TAB(53);ko(a)
PRINT
NEXT a
PRINT TAB(17) "Menü";TAB(37)mi+1
PRINT:PRINT
PRINT TAB(16) "Verkäufer ?"
h=7:ap=mi+1:li=15:rr=60:GOSUB Menkast
PRINT
Ab4:
gv=a
IF gv=mi+1 THEN Geschaefte
IF gv<1 OR gv>mi THEN LOCATE CSRLIN-1,16 : GOTO Ab4
PRINT : COLOR 3
CLS
PRINT
b=0:c=0
FOR a = 1 TO 40
IF bf(a) = gv AND hz(a) = 0 AND hy(a)=0 AND geha(a)=0 THEN
IF b=14 THEN LOCATE 2,40
IF b<14 THEN
PRINT TAB(12)fe$(a);TAB(31);a
hs = 1
LINE (59,b*8+7)-(76,b*8+15),5,b
LINE (60,b*8+7)-(77,b*8+15),5,b
c=c+1:me(c)=a
END IF
IF b>13 THEN
PRINT TAB(41)fe$(a);TAB(60);a
LINE (291,(b-14)*8+7)-(308,(b-14)*8+15),5,b
LINE (292,(b-14)*8+7)-(309,(b-14)*8+15),5,b
c=c+1:me(c)=a
END IF
b=b+1
END IF
NEXT
IF hs = 0 THEN
PRINT : PRINT TAB(12) na$(gv) " hat kein Grundstück !"
GOSUB Abfra : GOTO Geschaefte
END IF
hs = 0
LOCATE 16: COLOR 1 :PRINT
PRINT TAB (12) "Grundstück (Return=Tastatur) ?"
Ab3:
sh=0
ON MOUSE GOSUB Maus.Str
MOUSE ON
WHILE sh=0
IF INKEY$=CHR$(13) THEN
PRINT TAB(12):INPUT "Nummer ";sh
END IF
WEND
IF bf(sh)<>gv OR hz(sh) > 0 OR hy(sh) = 1 OR geha(sh)>0 THEN
LOCATE CSRLIN-1 : GOTO Ab3
END IF
CLS
COLOR 4
LOCATE 5,17 : PRINT "Spieler Nummer Vermögen"
PRINT
COLOR 1
FOR a = 1 TO mi
PRINT TAB(17) ;na$(a);TAB(37);a;TAB(53);ko(a)
PRINT
NEXT a
PRINT TAB(17) "Menü";TAB(37)mi+1
PRINT:PRINT
COLOR 9
PRINT TAB(16) "Käufer ? ";
h=7:ap=mi+1:li=15:rr=60:GOSUB Menkast
PRINT ": "na$(a)
kaum:
gka=a
IF gka=mi+1 THEN Geschaefte
IF gka<1 OR gka>mi THEN LOCATE CSRLIN-1,16 : GOTO kaum
PRINT : COLOR 3
PRINT TAB(16) "Grundstück : ";fe$(sh)
pr=pr(sh)
gx=397:gy=110:GOSUB gadget
gp=pr
PRINT TAB(16) "Preis :"pr
xr=397:yr=130:GOSUB requester
IF re=0 THEN GOTO Geschaefte
ko(gka) = ko(gka)-gp : ko(gv) = ko(gv)+gp : bf(sh) = gka
IF sh = 6 OR sh = 16 OR sh = 26 OR sh = 36 THEN ab(gv) = ab(gv)-1 : ab(gka) = ab(gka)+1
IF sh = 13 OR sh = 29 THEN aw(gv) = aw(gv)-1 : aw(gka) = aw(gka)+1
IF fes(dr) = sh THEN gg = 1
GOSUB bpBerechnung
GOTO Geschaefte
Hypotheken:
CLS
COLOR 3
LOCATE 2,27 : PRINT "H Y P O T H E K E N"
GOSUB Linie
COLOR 5
LOCATE 10,25
PRINT "Hpotheken aufnehmen..........1"
PRINT
PRINT TAB(25) "Hpotheken abzahlen...........2"
PRINT
PRINT TAB(25) "Zum Menü.....................3"
h=10:ap=3:GOSUB Menkast
IF a = 1 THEN Hypaufnehmen
IF a = 2 THEN Hypabzahlen
IF a = 3 THEN Geschaefte
Hypaufnehmen:
CLS
GOSUB bpBerechnung
COLOR 3
b=0:c=0:PRINT:hs=0
FOR a = 1 TO 40
IF bf(a) = dr AND hy(a) = 0 AND geha(a)=0 THEN
IF b=14 THEN LOCATE 2,40
IF b<14 THEN
PRINT TAB(12)fe$(a);TAB(31);a
hs = 1
LINE (59,b*8+7)-(76,b*8+15),5,b
LINE (60,b*8+7)-(77,b*8+15),5,b
c=c+1:me(c)=a
END IF
IF b>13 THEN
PRINT TAB(41)fe$(a);TAB(60);a
LINE (291,(b-14)*8+7)-(308,(b-14)*8+15),5,b
LINE (292,(b-14)*8+7)-(309,(b-14)*8+15),5,b
c=c+1:me(c)=a
END IF
b=b+1
END IF
NEXT
IF hs = 0 THEN
PRINT TAB(20) "Sie können keine Hypotheken aufnehmen !"
hs = 0
GOSUB Abfra : GOTO Hypotheken
END IF
LOCATE 17: COLOR 1 :PRINT TAB(12) "Ihr Vermögen:";ko(dr)
PRINT TAB (12) "Grundstück (Return=Tastatur) ?"
hmein:
sh=0
ON MOUSE GOSUB Maus.Str
MOUSE ON
WHILE sh=0
IF INKEY$=CHR$(13) THEN
PRINT TAB(12):INPUT "Nummer ";sh
END IF
WEND
IF sh = 0 THEN Hypotheken
IF sh>40 OR sh<1 THEN LOCATE CSRLIN-1,16 : sh=0:GOTO hmein
IF bf(sh)<>dr OR hz(sh) > 0 OR hy(sh) = 1 OR geha(sh)>0 THEN
LOCATE CSRLIN-1 : GOTO hmein
END IF
PRINT
COLOR 6
PRINT:PRINT TAB(12)"Hypothek auf "fe$(sh)" ?"
xr=383:yr=125
GOSUB requester
IF re=0 THEN Hypotheken
hy(sh)=1 : ko(dr)=ko(dr)+pr(sh)/2
GOTO Hypotheken
Hypabzahlen:
CLS
GOSUB bpBerechnung
COLOR 3
b=0:c=0:PRINT:hs=0:FOR a=1 TO 28:me(a)=0:NEXT
FOR a = 1 TO 40
IF bf(a) = dr AND hy(a) = 1 THEN
IF b=14 THEN LOCATE 2,40
IF b<14 THEN
PRINT TAB(12)fe$(a);TAB(31);a
hs = 1
LINE (59,b*8+7)-(76,b*8+15),5,b
LINE (60,b*8+7)-(77,b*8+15),5,b
c=c+1:me(c)=a
END IF
IF b>13 THEN
PRINT TAB(41)fe$(a);TAB(60);a
LINE (291,(b-14)*8+7)-(308,(b-14)*8+15),5,b
LINE (292,(b-14)*8+7)-(309,(b-14)*8+15),5,b
c=c+1:me(c)=a
END IF
b=b+1
END IF
NEXT
IF hs = 0 THEN
PRINT TAB(23) "Sie haben keine Hypotheken !"
hs = 0
GOSUB Abfra : GOTO Hypotheken
END IF
LOCATE 17: COLOR 1 :PRINT TAB(12) "Ihr Vermögen:";ko(dr)
PRINT TAB (12) "Grundstück (Return=Tastatur) ?"
hamein:
sh=0
ON MOUSE GOSUB Maus.Str
MOUSE ON
WHILE sh=0
IF INKEY$=CHR$(13) THEN
PRINT TAB(12):INPUT "Nummer ";sh
END IF
WEND
IF sh = 0 THEN Hypotheken
IF sh>40 OR sh<1 THEN LOCATE CSRLIN-1,16 : sh=0:GOTO hamein
IF bf(sh)<>dr OR hy(sh) = 0 THEN
LOCATE CSRLIN-1 : GOTO hamein
END IF
COLOR 6
PRINT:PRINT TAB(12)"Hypothek von "fe$(sh)" ?"
xr=383:yr=125
GOSUB requester
IF re=0 THEN Hypotheken
hy(sh)=0 : ko(dr)=ko(dr)-pr(sh)/2-pr(sh)/10
GOTO Hypotheken
Freikartenhandel:
CLS
COLOR 3
LOCATE 2,20 : PRINT "F r e i k a r t e n h a n d e l"
GOSUB Linie
COLOR 4
FOR a = 1 TO mi
IF fk(dr)>0 THEN f = 1
NEXT
IF f = 0 THEN
LOCATE 9,20 : PRINT "Niemand besitzt eine Freikarte !" : GOSUB Abfra
GOTO Geschaefte
END IF
f = 0
COLOR 4
LOCATE 5,16 : PRINT "Spieler Freikarten Nummer"
PRINT
COLOR 1
FOR a = 1 TO mi
PRINT
PRINT TAB(16) : PRINT USING "\ \";na$(a);STR$(fk(a));STR$(a)
NEXT
PRINT :PRINT TAB(35) "Menü"TAB(54);mi+1
COLOR 9
PRINT :PRINT :PRINT TAB(16) "Verkäufer (Nummer) ? ";
ap=mi+1:h=8:li=14:rr=60:GOSUB Menkast
IF a=mi+1 THEN Geschaefte
gv=a
IF fk(gv) = 0 THEN LOCATE CSRLIN-1,16 : GOTO Freikartenhandel
PRINT ": "na$(gv)
PRINT
PRINT TAB(16) "Käufer (Nummer) ? ";
ap=mi+1:h=8:li=14:rr=60:GOSUB Menkast
gk=a
IF a=mi+1 THEN Freikartenhandel
PRINT ": "na$(gk)
pr=1000:gx=400:gy=100:GOSUB gadget
PRINT
gp&=pr
xr=367:yr=110:GOSUB requester
IF re=0 THEN Geschaefte
ko(gk) = ko(gk)-gp& : ko(gv) = ko(gv)+gp&
fk(gk) = fk(gk)+1 : fk(gv) = fk(gv)-1
GOTO Geschaefte
Haeuserverk:
CLS:c=0
COLOR 3
LOCATE 2,20 : PRINT "H ä u s e r v e r k a u f e n"
GOSUB Linie
COLOR 4
LOCATE 8,1
IF bp(7) = dr AND hz(2)>0 OR hz(4)>0 AND bp(7) = dr THEN
bk(0) = 1 : bk = 1
PRINT TAB(3) fe$(2)", "fe$(4)", ";TAB(52);1
c=c+1:me(1)=1
END IF
FOR a = 1 TO 6
IF bp(a) = dr AND hz(zg(3*a-2))>0 OR hz(zg(3*a-1))>0 AND bp(a) = dr OR hz(zg(3*a))>0 AND bp(a) = dr THEN
PRINT TAB(3);
FOR b = 3 TO 1 STEP -1
PRINT fe$(zg(a*3-b+1));", ";
bk(a) = 1:bk = 1
NEXT b
c=c+1:me(c)=a+1
PRINT TAB(52);a+1
END IF
NEXT a
IF bp(8) = dr AND hz(38)>0 OR hz(40)>0 AND bp(8) = dr THEN
bk(7) = 1 : bk = 1
PRINT TAB(3) fe$(38)", "fe$(40)", ";TAB(52);8
c=c+1:me(c)=8
END IF
IF bk = 0 THEN
PRINT TAB(20) "Sie haben keine Häuser !" : GOSUB Abfra
GOTO Geschaefte
END IF
FOR a=1 TO c
LINE (440,47+8*a)-(454,55+8*a),3,b:LINE (441,47+8*a)-(455,55+8*a),3,b
NEXT
COLOR 7 : LOCATE 5,2 : PRINT" Sie haben Häuser auf :" : PRINT
bk = 0
Haverkpl:
LOCATE 18,3 : PRINT "Wo wollen Sie Häuser verkaufen ?"
ON MOUSE GOSUB Maus.Bauver
MOUSE ON
fb=0:a$=""
WHILE fb=0
a$=INKEY$
IF a$ <> "" THEN
IF VAL(a$) <= me(c) THEN fb = VAL(a$)
END IF
WEND
GOTO Weiterver
Maus.Bauver:
kno=MOUSE(0)
xma=MOUSE(1)
yma=MOUSE(2)
IF xma>440 AND xma<455 AND yma>55 AND yma<55+8*c THEN
fb=me(INT((yma-55)/8)+1)
MOUSE OFF
END IF
RETURN
Weiterver:
fb=fb-1
IF fb>7 OR fb<0 OR fb<>INT(fb) THEN Haverkpl
IF fb = 0 AND bp(7) = dr AND bk(0)>0 THEN ok
IF fb = 7 AND bp(8) = dr AND bk(7)>0 THEN ok
IF bp(fb)<>dr OR bk(fb) = 0 THEN Haverkpl
ok:
FOR a = 1 TO 8
bk(a) = 0
NEXT
Haeuserv:
CLS
COLOR 3
LOCATE 2,20 : PRINT "H ä u s e r v e r k a u f e n"
GOSUB Linie
LOCATE 5,1
COLOR 5
PRINT " Straße Häuserzahl verkaufen"
PRINT
COLOR 1
IF fb = 0 OR fb = 7 THEN
cx = 0
FOR a = 1 TO 2
IF a = 1 AND fb = 0 THEN b = 2
IF a = 2 AND fb = 0 THEN b = 4
IF a = 1 AND fb = 7 THEN b = 38
IF a = 2 AND fb = 7 THEN b = 40
LOCATE 5+a*2:PRINT TAB (2) fe$(b);TAB (27) hz(b) TAB (41);
Hav:
FOR p=0 TO hz(b)
LOCATE 5+a*2,41+3*p:PRINT p
LINE (321+24*p,29+16*a)-(345+24*p,40+a*16),5,b
LINE (322+24*p,30+16*a)-(346+24*p,41+a*16),4,b
NEXT p
ON MOUSE GOSUB Mausneu.Baudree
MOUSE ON
aus(a)=-1
WHILE aus(a)=-1
a$=INKEY$
IF a$ <> "" THEN
aus(a)=VAL(a$)
END IF
WEND
MOUSE OFF
GOTO weee:
Mausneu.Baudree:
kno=MOUSE(0)
xma=MOUSE(1)
yma=MOUSE(2)
IF xma>321 AND xma<346+24*p AND yma>53+16*a AND yma<65+16*a THEN
aus(a)=INT((xma-321)/24)
END IF
RETURN
weee:
IF hz(b)-aus(a)<0 THEN LOCATE CSRLIN-1,41 : GOTO Hav
hp = INT(fb/2+1)*500
cx = cx+aus(a)*hp
ge(a) = hz(b)-aus(a)
NEXT a
IF ge(1)>ge(2)+1 OR ge(2)>ge(1)+1 THEN Haeuserv
hz(b-2) = ge(a-2)
hz(b) = ge(a-1)
ko(dr) = ko(dr)+cx
GOTO Geschaefte
END IF
cx = 0
FOR a = 3 TO 1 STEP -1
b = (zg(3*fb-a+1))
PRINT
LOCATE 5+(4-a)*2:PRINT TAB (2) fe$(b); TAB (27) hz(b) TAB (41);
FOR p=0 TO hz(b)
PRINT TAB(41+3*p) p;
LINE (321+24*p,29+16*(4-a))-(345+24*p,40+(4-a)*16),5,b
LINE (322+24*p,30+16*(4-a))-(346+24*p,41+(4-a)*16),4,b
NEXT p
ON MOUSE GOSUB Mausneu.Baudrver
MOUSE ON
aus(a)=-1
WHILE aus(a)=-1
a$=INKEY$
IF a$ <> "" THEN
aus(a)=VAL(a$)
END IF
WEND
MOUSE OFF
GOTO weiterdrver
Mausneu.Baudrver:
kno=MOUSE(0)
xma=MOUSE(1)
yma=MOUSE(2)
IF xma>321 AND xma<346+24*p AND yma>29+16*(4-a) AND yma<41+16*(4-a) THEN
aus(a)=INT((xma-321)/24)
END IF
RETURN
weiterdrver:
IF hz(b)-aus(a)<0 THEN LOCATE CSRLIN-1,41 : GOTO Hv
hp = INT(fb/2+1)*500
cx = cx+aus(a)*hp
ge(a) = hz(b)-aus(a)
NEXT a
IF ge(1)>ge(2)+1 OR ge(1)>ge(3)+1 THEN Haeuserv
IF ge(2)>ge(1)+1 OR ge(2)>ge(3)+1 THEN Haeuserv
IF ge(3)>ge(1)+1 OR ge(3)>ge(2)+1 THEN Haeuserv
FOR a = 3 TO 1 STEP -1
hz(zg(3*fb-a+1)) = ge(a)
NEXT
ko(dr) = ko(dr)+cx
GOSUB bpBerechnung
GOTO Hauptmenue
Freikaufen:
CLS
COLOR 3
LOCATE 2,25 : PRINT "F R E I K A U F E N
GOSUB Linie
LOCATE 10,26
IF gef(dr) = 0 THEN
COLOR 4
PRINT TAB(25) "Sie sind nicht im Gefängnis !"
GOSUB Abfra
GOTO Geschaefte
END IF
COLOR 5
PRINT "Freikaufen durch 1000.-...1"
PRINT
PRINT TAB(26) "Freikaufen durch Karte....2"
PRINT
PRINT TAB(26) "Zum Menü..................3
PRINT
h=10:ap=3:GOSUB Menkast
IF a = 1 THEN ko(dr) = ko(dr)-1000 : gef(dr)=0 : GOTO Geschaefte
IF a = 2 THEN
IF fk(dr)>0 THEN
fk(dr) = fk(dr)-1 : gef(dr)=0 : kf=kf-1 : GOTO Geschaefte
ELSE
PRINT
COLOR 3
PRINT TAB(23) "Sie haben keine Freikarte !"
END IF
END IF
IF a = 3 THEN Geschaefte
Besitz:
CLS
COLOR 3
LOCATE 2,25 : PRINT "B e s i t z"
GOSUB Linie
COLOR 1 : LOCATE 5,5
PRINT "Spieler : ";na$(dr)
PRINT TAB(5) "Vermögen :";ko(dr)
PRINT TAB(5) "Freikarten :";fk(dr)
LOCATE 9,2 : COLOR 4
PRINT TAB(5) "Grundstück Hypothek"
COLOR 7
AREA (270,56) : AREA STEP (14,5) :AREA STEP (0,9) : AREA STEP (-28,0)
AREA STEP (0,-9) : AREAFILL
COLOR 4
AREA (174,59) : AREA STEP (10,4) :AREA STEP (0,7) : AREA STEP (-20,0)
AREA STEP (0,-7) : AREAFILL
WINDOW 4,"",(0,76)-(630,200),0
COLOR 6
b=0
PRINT
FOR a = 1 TO 40
IF b=10 THEN GOSUB Abfra:CLS:PRINT:b=11
IF b=21 THEN GOSUB Abfra:CLS:PRINT:b=22
IF bf(a) = dr AND hz(a) = 5 THEN
PRINT TAB(5) fe$(a);TAB(22) " 0";TAB(34) "1"; : GOTO Bes
END IF
IF bf(a) = dr THEN PRINT TAB(5) fe$(a); TAB(22) hz(a);TAB (34)"0":b=b+1
Bes:
IF hy(a) = 1 AND bf(a) = dr THEN LOCATE CSRLIN-1,44 : PRINT pr(a)/2
NEXT a
GOSUB Abfra
WINDOW CLOSE 4
GOTO Hauptmenue
Grundstueck:
CLS:x=490:y=62
COLOR 3
LOCATE 2,23 : PRINT "G r u n d s t ü c k k a u f e n"
GOSUB Linie
IF fes(dr) = 13 THEN GOSUB Glube
IF fes(dr)=29 THEN GOSUB Aquakiki
IF fes(dr)=6 OR fes(dr)=16 OR fes(dr)=26 OR fes(dr)=36 THEN GOSUB Lok
COLOR 1 : LOCATE 6,23
IF pr(fes(dr)) > 0 THEN nk = 1
IF bf(fes(dr)) <> 0 OR nk = 0 OR bf(fes(dr)) = dr THEN
PRINT TAB(20)"Sie können '"fe$(fes(dr))"' nicht kaufen !" : nk=0
GOSUB Abfra
GOTO Hauptmenue
END IF
nk=0
PRINT "Ihr Vermögen :"ko(dr)
PRINT
PRINT TAB(23) "Sie können kaufen : ";fe$(fes(dr))
PRINT
PRINT TAB(23) "Für den Preis :";pr(fes(dr))",-"
PRINT
xr=184
yr=100
GOSUB requester
IF re=1 THEN
bf(fes(dr)) = dr
ko(dr) = ko(dr)-pr(fes(dr))
IF fes(dr) = 6 OR fes(dr) = 16 OR fes(dr) = 26 OR fes(dr) = 36 THEN ab(dr) = ab(dr)+1
IF fes(dr) = 13 OR fes(dr) = 29 THEN aw(dr) = aw(dr)+1
b=0
GOSUB bpBerechnung
END IF
GOTO Hauptmenue
Bauen:
CLS
COLOR 3
LOCATE 2,31 : PRINT "B a u e n"
GOSUB Linie
COLOR 4
GOSUB bpBerechnung
LOCATE 8,1
c=0
IF bp(7) = dr THEN
bk=1
PRINT TAB(3) fe$(2)", "fe$(4)", ";TAB(52);1
c=c+1:me(1)=1
END IF
FOR a = 1 TO 6
IF bp(a) = dr THEN
PRINT TAB(3);
FOR b = 3 TO 1 STEP -1
bk=1
PRINT fe$(zg(a*3-b+1));", ";
NEXT b
c=c+1:me(c)=a+1
PRINT TAB(52);a+1
END IF
NEXT a
IF bp(8) = dr THEN
bk=1
PRINT TAB(3) fe$(38)", "fe$(40)", ";TAB(52);8
c=c+1:me(c)=8
END IF
IF bk = 0 THEN
PRINT TAB(25)"Sie können nicht bauen !" : GOSUB Abfra
GOTO Hauptmenue
END IF
FOR a=1 TO c
LINE (440,47+8*a)-(454,55+8*a),3,b:LINE (441,47+8*a)-(455,55+8*a),3,b
NEXT
COLOR 7 : LOCATE 5,2 : PRINT " Sie können bauen auf :" : PRINT
bk=0
Baupl:
LOCATE 18,3 : PRINT "Wo wollen Sie bauen ?"
ON MOUSE GOSUB Maus.Bau
MOUSE ON
fb=0:a$=""
WHILE fb=0
a$=INKEY$
IF a$ <> "" THEN
IF VAL(a$) <= me(c) THEN fb = VAL(a$)
END IF
WEND
GOTO Korri
Maus.Bau:
kno=MOUSE(0)
xma=MOUSE(1)
yma=MOUSE(2)
IF xma>440 AND xma<455 AND yma>55 AND yma<55+8*c THEN
fb=me(INT((yma-55)/8)+1)
MOUSE OFF
END IF
RETURN
Korri:
fb=fb-1
IF fb = -1 THEN Hauptmenue
IF fb > 7 OR fb < 0 OR fb <> INT(fb) THEN Baupl
IF fb=0 AND bp(7)=dr THEN Haeuser
IF fb=7 AND bp(8)=dr THEN Haeuser
IF bp(fb)<>dr THEN Baupl
IF fb=7 AND bp(8)<>dr THEN Baupl
Haeuser:
awz=0:awg=0:aus(1)=0:aus(2)=0
CLS
COLOR 3
LOCATE 2,28 : PRINT "B a u e n"
GOSUB Linie
LOCATE 5,1 : COLOR 6
PRINT " Ein Haus kostet: ";INT(fb/2+1)*1000;".-"
PRINT " Ihr Vermögen : ";ko(dr)
PRINT : COLOR 5
PRINT " Straße Häuserzahl neu dazu"
COLOR 6
IF fb = 0 OR fb = 7 THEN
FOR a = 1 TO 2
IF a = 1 AND fb = 0 THEN b = 2
IF a = 2 AND fb = 0 THEN b = 4
IF a = 1 AND fb = 7 THEN b = 38
IF a = 2 AND fb = 7 THEN b = 40
PRINT
PRINT TAB (2) fe$(b); TAB (27) hz(b) TAB (41)
NeueHa:
FOR p=0 TO 5-hz(b)
LOCATE 8+a*2,41+3*p:PRINT p
LINE (321+24*p,53+16*a)-(345+24*p,64+a*16),5,b
LINE (322+24*p,54+16*a)-(346+24*p,65+a*16),4,b
NEXT p
ON MOUSE GOSUB Mausneu.Bau
MOUSE ON
aus(a)=-1
WHILE aus(a)=-1
a$=INKEY$
IF a$ <> "" THEN
aus(a)=VAL(a$)
END IF
WEND
MOUSE OFF
GOTO Weidda
Mausneu.Bau:
kno=MOUSE(0)
xma=MOUSE(1)
yma=MOUSE(2)
IF xma>321 AND xma<346+24*p AND yma>53+16*a AND yma<65+16*a THEN
aus(a)=INT((xma-321)/24)
END IF
RETURN
Weidda:
IF hz(b)+aus(a) > 5 THEN LOCATE CSRLIN-1,41 : GOTO NeueHa
hp = INT(fb/2+1)*1000
awz=awz+aus(a)*hp
awg=awg+aus(a)
ge(a)=hz(b)+aus(a)
NEXT a
IF ge(1) > ge(2)+1 OR ge(2)>ge(1)+1 THEN Haeuser
hz(b-2) = ge(1)
hz(b) = ge(2)
ko(dr) = ko(dr)-awz
GOTO Hauptmenue
END IF
awz=0:awg=0:aus(1)=0:aus(2)=0
FOR a = 3 TO 1 STEP -1
b = (zg(3*fb-a+1))
PRINT
PRINT TAB (2) fe$(b); TAB (27) hz(b) TAB (41);
NeueH:
FOR p=0 TO 5-hz(b)
LOCATE 8+(4-a)*2,41+3*p:PRINT p
LINE (321+24*p,53+16*(4-a))-(345+24*p,64+(4-a)*16),5,b
LINE (322+24*p,54+16*(4-a))-(346+24*p,65+(4-a)*16),4,b
NEXT p
ON MOUSE GOSUB Mausneu.Baudr
MOUSE ON
aus(a)=-1
WHILE aus(a)=-1
a$=INKEY$
IF a$ <> "" THEN
aus(a)=VAL(a$)
END IF
WEND
MOUSE OFF
GOTO weiterdr
Mausneu.Baudr:
kno=MOUSE(0)
xma=MOUSE(1)
yma=MOUSE(2)
IF xma>321 AND xma<346+24*p AND yma>53+16*(4-a) AND yma<65+16*(4-a) THEN
aus(a)=INT((xma-321)/24)
END IF
RETURN
weiterdr:
IF hz(b)+aus(a) > 5 THEN LOCATE CSRLIN-1,41 : GOTO NeueH
hp = INT(fb/2+1)*1000
awz=awz+aus(a)*hp
awg=awg+aus(a)
ge(a)=hz(b)+aus(a)
NEXT a
IF ge(1) > ge(2)+1 OR ge(1) > ge(3)+1 THEN Haeuser
IF ge(2) > ge(1)+1 OR ge(2) > ge(3)+1 THEN Haeuser
IF ge(3) > ge(1)+1 OR ge(3) > ge(2)+1 THEN Haeuser
FOR a = 3 TO 1 STEP -1
hz(zg(3*fb-a+1)) = ge(a)
NEXT a
ko(dr) = ko(dr)-awz
GOTO Hauptmenue
Spielplan:
LOCATE 5,1
COLOR 1
IF gem=0 THEN
acbmname$="spielplan.acbm"
GOSUB acbmloader
gem=1
GET (2,0)-(572,19+4),sp1
GET (572-4,0)-(629,190),sp2
GET (60,190-4)-(629,209+10),sp3
GET (2,19)-(59+4,209+10),sp4
ELSE
PUT (2,0),sp1,PSET
PUT (572-4,0),sp2,PSET
PUT (60,190-4),sp3,PSET
PUT (2,19),sp4,PSET
END IF
GOSUB Spielfiguren
RETURN
Diskette:
CLS
COLOR 3
LOCATE 2,29 : PRINT "D i s k e t t e"
GOSUB Linie
LOCATE 8,27
COLOR 5
PRINT "Spielstand laden..........1"
PRINT
PRINT TAB(27) "Spielstand abspeichern....2"
PRINT
PRINT TAB(27) "Disketteninhalt anzeigen..3"
PRINT
PRINT TAB(27) "Zum Menü..................4"
h=8:ap=4:GOSUB Menkast
IF a = 1 THEN Laden
IF a = 2 THEN Speichern
IF a = 3 THEN Inhalt
IF a = 4 THEN Hauptmenue
Speichern:
LOCATE 17,23
COLOR 3
INPUT "Speichern: Dateiname ";da$
IF da$ = "" THEN Diskette
OPEN da$+"-MO-" FOR OUTPUT AS #1
WRITE #1,mi,dr,wu,we
FOR a = 1 TO mi
WRITE #1,na$(a),ko(a),fk(a),fes(a),aw(a),ab(a),gef(a)
NEXT
FOR a = 1 TO 40
WRITE #1,bf(a),hz(a),hy(a)
NEXT
CLOSE #1
GOTO Diskette
Laden:
LOCATE 17,23
COLOR 3
INPUT "Laden: Dateiname ";da$
IF da$ = "" THEN Diskette
OPEN "I",#1,da$+"-MO-"
INPUT #1,mi,dr,wu,we
FOR a = 1 TO mi
INPUT #1,na$(a),ko(a),fk(a),fes(a),aw(a),ab(a),gef(a)
NEXT
FOR a = 1 TO 40
INPUT #1,bf(a),hz(a),hy(a)
NEXT
CLOSE #1
GOTO Diskette
Inhalt:
WINDOW 4,"Disketteninhalt",(155,25)-(455,195),0,1
FILES
GOSUB Abfra
WINDOW CLOSE 4
GOSUB bpBerechnung
GOTO Diskette
Ereigniskarten:
nn = 1
ek = ek+1 : IF ek>10 THEN ek = 1
WINDOW 5,"Ereignisfeld",(50,79)-(580,171),0,1
COLOR 5
LOCATE 3,2 : PRINT "Auf der Karte steht :"
PRINT TAB(2) "---------------------"
PRINT : COLOR 1
IF ek<>5 THEN PRINT " "ek$(ek)
IF ek = 1 THEN fes(dr) = 40
IF ek = 2 THEN ko(dr) = ko(dr)+3000
IF ek = 3 THEN ko(dr) = ko(dr)+1000
IF ek = 4 THEN fes(dr) = 1 : ko(dr)=ko(dr)+8000
IF ek = 5 THEN
IF kf = 2 THEN ek = 6 : GOTO Eka
kf = kf+1 : PRINT " "ek$(ek)
fk(dr) = fk(dr)+1
END IF
Eka:
IF ek = 6 THEN ko(dr) = ko(dr)-300
IF ek = 7 THEN gef(dr) = 1 : fes(dr) = 11
IF ek = 8 THEN
FOR a = 1 TO mi
IF a<>dr THEN ko(a) = ko(a)+1000 : ko(dr) = ko(dr)-1000
NEXT
PRINT " Das kostet ";(mi-1)*1000;".-"
END IF
IF ek = 9 THEN fes(dr) = 2
IF ek = 10 THEN
FOR a = 1 TO 40
IF bf(a) = dr AND hz(a)<5 THEN pz = pz+hz(a)*500
IF bf(a) = dr AND hz(a)=5 THEN pz = pz+2000
NEXT
ko(dr) = ko(dr)-pz
PRINT " Das kostet ";pz;".-"
pz = 0
END IF
GOSUB Abfra
WINDOW CLOSE 5
GOTO Hauptmenue
Gemeinschaftskarten:
nn = 1
gk = gk+1 : IF gk>10 THEN gk = 1
WINDOW 5,"Gemeinschaftsfeld",(50,79)-(580,171),0,1
COLOR 5
LOCATE 3,2 : PRINT"Auf der Karte steht :"
PRINT TAB(2) "---------------------"
PRINT : COLOR 1
IF gk<>8 THEN PRINT " "gk$(gk)
IF gk = 1 THEN gef(dr) = 1:fes(dr) = 11
IF gk = 2 THEN ko(dr) = ko(dr)+2000
IF gk = 3 THEN ko(dr) = ko(dr)-1000
IF gk = 4 THEN
FOR a = 1 TO 40
IF bf(a) = dr AND hz(a)<5 THEN pz = pz+hz(a)*800
IF bf(a) = dr AND hz(a)=5 THEN pz = pz+2300
NEXT
ko(dr) = ko(dr)-pz
PRINT " Das kostet ";pz;".-"
pz = 0
END IF
IF gk = 5 THEN ko(dr) = ko(dr)-2000
IF gk = 6 THEN ko(dr) = ko(dr)+4000
IF gk = 7 THEN ko(dr) = ko(dr)+2000
IF gk = 8 THEN
IF kf = 2 THEN gk = 9 : GOTO gka
kf = kf+1 : PRINT " "gk$(gk)
fk(dr) = fk(dr)+1
END IF
gka:
IF gk = 9 THEN
FOR a = 1 TO mi
IF a<>dr THEN ko(a) = ko(a)-1000 : ko(dr) = ko(dr)+1000
NEXT
PRINT " Sie erhalten ";(mi-1)*1000;".-"
END IF
IF gk = 10 THEN fes(dr) = 1 : ko(dr) = ko(dr)+8000
GOSUB Abfra
WINDOW CLOSE 5
GOTO Hauptmenue
Mieten:
GOSUB bpBerechnung
COLOR 1
LOCATE 9,23
miet = 1
mie = mi(fes(dr)+40*hz(fes(dr)))
IF (bp(7)>0 AND fes(dr) = 2) OR (bp(7)>0 AND fes(dr) = 4) THEN
IF hz(fes(dr))=0 THEN mie = mie*2
END IF
IF (bp(8)>0 AND fes(dr) = 38) OR (bp(8)>0 AND fes(dr) = 40) THEN
IF hz(fes(dr))=0 THEN mie = mie*2
END IF
IF fes(dr)>6 AND fes(dr)<38 THEN
IF bp(INT((fes(dr)-1)/5)) >0 AND hz(fes(dr))=0 THEN mie = mie*2
END IF
IF fes(dr) = 6 OR fes(dr) = 16 OR fes(dr) = 26 OR fes(dr) = 36 THEN
IF ab(bf(fes(dr))) = 1 THEN mie = 5
IF ab(bf(fes(dr))) = 2 THEN mie = 10
IF ab(bf(fes(dr))) = 3 THEN mie = 20
IF ab(bf(fes(dr))) = 4 THEN mie = 40
mie = mie*100
END IF
IF fes(dr) = 13 OR fes(dr) = 29 THEN
IF aw(bf(fes(dr))) = 1 THEN mie = (wu+we)*80
IF aw(bf(fes(dr))) = 2 THEN mie = (wu+we)*200
END IF
PRINT "Mieten : Sie müssen"mie"an " na$(bf(fes(dr)));
PRINT " zahlen."
ko(dr) = ko(dr)-mie : ko(bf(fes(dr))) = ko(bf(fes(dr)))+mie
GOSUB Abfra
GOTO Hauptmenue
Ende:
PRINT
PRINT TAB(23) "Sie besitzen kein Bargeld mehr !"
GOSUB Abfra
FOR a = 1 TO 40
IF bf(a) = dr AND hy(a) = 0 THEN kl = 1
NEXT
IF kl = 1 THEN kl = 0 : GOTO Geschaefte
Spielende:
CLS
COLOR 3 : LOCATE 2,25 : PRINT "E N D E D E S S P I E L S"
GOSUB Linie
COLOR 1
LOCATE 7,1
FOR a = 1 TO 40
IF bf(a)<>0 THEN
IF hy(a) = 0 THEN ko(bf(a)) = ko(bf(a)) + pr(a) + (hz(a)*INT(a/10)*1000)
ELSE
ko(bf(a)) = ko(bf(a))+pr(a)/2
END IF
NEXT
FOR a = 1 TO mi
ko(a) = ko(a)+fk(a)*1000
NEXT
FOR b = 1 TO mi
FOR a = 1 TO mi-1
IF ko(a)<ko(a+1) THEN SWAP ko(a),ko(a+1) : SWAP na$(a),na$(a+1)
NEXT a,b
PRINT
FOR a = 1 TO mi
IF a = 1 THEN COLOR 7 :ELSE COLOR 1
PRINT TAB(14) a;".) ";na$(a);TAB(36)"Gesamtvermögen:";ko(a)
NEXT
GOSUB sound2
REM > Speicher zurueckgeben <
FOR a=1 TO 2
:
CALL FreeMem&(Adresse&(a),Laenge&(a))
:
NEXT a
REM > Ende <
:
LIBRARY CLOSE
END
bpBerechnung:
FOR a = 1 TO 8 : bp(a) = 0 : NEXT a
FOR d = 1 TO mi
b = 0
FOR a = 1 TO 18 STEP 3
b = b+1
IF bf(zg(a)) = d AND bf(zg(a+1)) = d AND bf(zg(a+2)) = d THEN
IF hy(zg(a)) = 0 AND hy(zg(a+1)) = 0 AND hy(zg(a+2)) = 0 THEN bp(b) = d
END IF
NEXT a
IF bf(2) = d AND bf(4) = d AND hy(2) = 0 AND hy(4) = 0 THEN bp(7) = d
IF bf(38)= d AND bf(40)= d AND hy(38)= 0 AND hy(40)= 0 THEN bp(8) = d
NEXT d
gzBerechnung:
FOR a=1 TO 40
gz(a)=0
NEXT
FOR a = 0 TO 35 STEP 5
FOR b = 1 TO 5
IF b>1 THEN gz(a+b) = gz(a+b-1)+hz(a+b)
IF b=1 THEN gz(a+b) = hz(a+b)
NEXT b
FOR b = 1 TO 5
gz(a+b) = gz(a+5)
NEXT b,a
gz(6) = 0 : gz(16) = 0 : gz(26) = 0
gz(36) = 0 : gz(13) = 0 : gz(29) = 0
geBerechnung:
geha(2)=hz(2)+hz(4):geha(4)=geha(2)
geha(38)=hz(38)+hz(40):geha(40)=geha(38)
FOR a= 1 TO 18 STEP 3
geha (zg(a)) =hz(zg(a))+hz(zg(a+1))+hz(zg(a+2))
geha (zg(a+1))=geha(zg(a)):geha(zg(a+2))=geha(zg(a))
NEXT
RETURN
fehler:
x=ERR
IF x>52 THEN
PRINT : PRINT " Disketten-Fehler : ";
IF x=53 THEN PRINT "Datei nicht gefunden !"
IF x=58 THEN PRINT "Datei existiert bereits !"
IF x=61 THEN PRINT "Diskette voll !"
IF x=70 THEN PRINT "Diskette ist schreibgeschützt !"
GOSUB Abfra
CLOSE
RESUME Diskette
END IF
PRINT "Programmfehler !",x
GOSUB Abfra
RESUME Hauptmenue
Sicher:
PRINT : PRINT TAB(16) "Alle Eingaben korrekt (j/n) ";
Ab13:
INPUT a$
IF a$="j"THEN RETURN
IF a$="n"THEN Geschaefte
LOCATE CSRLIN-1,44
GOTO Ab13
Linie:
LINE (0,20)-(640,20),3
RETURN
Abfra:
ON MOUSE GOSUB Maus.ab
MOUSE ON
a$=""
WHILE a$=""
a$=INKEY$
POKE bli,254
FOR t=1 TO 200:NEXT
POKE bli,252
FOR t=1 TO 150:NEXT
WEND
RETURN
Maus.ab:
a$="."
RETURN
Kont:
FOR a = 1 TO mi
ko(a) = INT(ko(a))
NEXT
RETURN
Stringseinlesen:
fe$ (1) = "L O S"
fe$ (2) = "Badstraße"
fe$ (3) = "Gemeinschaftsfeld"
fe$ (4) = "Turmstraße"
fe$ (5) = "Einkommensteuer"
fe$ (6) = "Südbahnhof"
fe$ (7) = "Chausseestraße"
fe$ (8) = "Ereignisfeld"
fe$ (9) = "Elisenstraße"
fe$(10) = "Poststraße"
fe$(11) = "Gefängnis"
fe$(12) = "Seestraße"
fe$(13) = "E-Werk"
fe$(14) = "Hafenstraße"
fe$(15) = "Neue Straße"
fe$(16) = "Westbahnhof"
fe$(17) = "Münchner Straße"
fe$(18) = "Gemeinschaftsfeld"
fe$(19) = "Wiener Straße"
fe$(20) = "Berliner Straße"
fe$(21) = "Frei Parken"
fe$(22) = "Theaterstraße"
fe$(23) = "Ereignisfeld"
fe$(24) = "Museumsstraße"
fe$(25) = "Opernplatz"
fe$(26) = "Nordbahnhof"
fe$(27) = "Lessingstraße"
fe$(28) = "Schillerstraße"
fe$(29) = "Wasserwerk"
fe$(30) = "Goethestraße"
fe$(31) = "Ins Gefängnis!"
fe$(32) = "Rathausplatz"
fe$(33) = "Hauptstrasse"
fe$(34) = "Gemeinschaftsfeld"
fe$(35) = "Bahnhofstraße"
fe$(36) = "Hauptbahnhof"
fe$(37) = "Ereignisfeld"
fe$(38) = "Parkstraße"
fe$(39) = "Zusatzsteuer"
fe$(40) = "Schloßallee"
ek$ (1) = "Rücken Sie vor bis zur Schloßallee !"
ek$ (2) = "Miete und Anleihzinsen werden fällig. Sie erhalten 3000.-"
ek$ (3) = "Die Bank zahlt Ihnen eine Dividende in Höhe von 1000.-"
ek$ (4) = "Rücken Sie bis auf LOS vor !"
ek$ (5) = "Sie erhalten eine Freikarte."
ek$ (6) = "Strafe für zu schnelles Fahren : 300.-"
ek$ (7) = "Gehen Sie in das Gefängnis !"
ek$ (8) = "Sie werden zum Vorstand gewählt. Zahlen Sie jedem Spieler 1000.-"
ek$ (9) = "Zurück zur Badstraße !"
ek$(10) = "Lassen Sie Ihre Häuser renovieren !"
gk$ (1) = "Gehen Sie in das Gefängnis !"
gk$ (2) = "Die Jahresrente von 2000.- wird fällig."
gk$ (3) = "Zahlen Sie Arztkosten in Höhe von 1000.- !"
gk$ (4) = "Sie werden zu Straßenausbesserungsarbeiten herangezogen."
gk$ (5) = "Zahlen Sie 2000.- an das Krankenhaus !"
gk$ (6) = "Bankirrtum zu Ihren Gunsten. Sie erhalten 4000.-"
gk$ (7) = "Sie erben 2000.-"
gk$ (8) = "Sie erhalten eine Freikarte."
gk$ (9) = "Ihr Geburtstag. Jeder Spieler zahlt Ihnen 1000.-"
gk$(10) = "Rücken Sie vor bis auf LOS !"
FOR a = 1 TO 40
READ pr(a)
pr(a) = pr(a)*100
NEXT
Grundstpreise:
DATA ,12,,12,,40,20,,20,24,,28,30,28,32,40,36,,36,40,
DATA 44,,44,48,40,52,52,30,56,,60,60,,64,40,,70,,80
Gruppen:
DATA 7,9,10,12,14,15,17,19,20,22,24,25,27,28,30,32,33,35,2,4,38,40
FOR a = 1 TO 22
READ zg(a)
NEXT a
Mietpreise:
FOR a = 1 TO 240
READ mi(a)
mi(a) = mi(a)*10
NEXT
DATA ,4,,8,,,12,,12,16,,20,,20,24,,28,,28,32,,36,,36,40,,44,44,,48
DATA ,52,52,,56,,,70,,100,,20,,40,,,60,,60,80,,100,,100,120,,140,,140
DATA 160,,180,,180,200,,220,220,,240,,260,260,,300,,,350,,400,,60,
DATA 120,,,180,,180,200,,300,,300,360,,400,,400,440,,500,,500,600,
DATA 660,660,,720,,780,780,,900,,,1000,,1200,,180,,360,,,540,,540,600
DATA ,900,,900,1000,,1100,,1100,1200,,1400,,1400,1500,,1600,1600,,1700
DATA ,1800,1800,,2000,,,2200,,2800,,320,,640,,,800,,800,900,,1250,
DATA 1250,1400,,1500,,1500,1600,,1750,,1750,1850,,1950,1950,,2050,
DATA 2200,2200,,2400,,,2600,,3400,,500,,900,,,1100,,1100,1200,,1500
DATA ,1500,1800,,1900,,1900,2000,,2100,,2100,2200,,2300,2300,,2400,
DATA 2550,2550,,2800,,,3000,,4000
Colors:
FOR a = 1 TO 40
READ fa(a)
NEXT
DATA ,8,,8,,,6,,6,6,,9,,9,9,,3,,3,3,,7,,7,7,,5,5,,5
DATA ,4,4,,4,,,2,,2
RETURN
Koords:
ko=MOUSE(0)
yma=MOUSE(2)
xma=MOUSE(1)
RETURN
Spielfiguren:
FOR a = 1 TO mi
IF fes(a)<=10 THEN
IF (a/2) <> INT(a/2) THEN
CIRCLE (fes(a)*57-27+4*a,9),6,11,,,0.9
PAINT (fes(a)*57-27+4*a,9),a+1,11
ELSE
CIRCLE (fes(a)*57-23-4*a,9),6,11,,,0.9
PAINT (fes(a)*57-23-4*a,9),a+1,11
END IF
END IF
IF fes(a)>10 AND fes(a)<=20 THEN
IF (a/2) <> INT(a/2) THEN
CIRCLE (602+4*a,19*(fes(a)-10)-9),6,11,,,0.9
PAINT (602+4*a,19*(fes(a)-10)-9),a+1,11
ELSE
CIRCLE (606-4*a,19*(fes(a)-10)-9),6,11,,,0.9
PAINT (606-4*a,19*(fes(a)-10)-9),a+1,11
END IF
END IF
IF fes(a)>20 AND fes(a)<=30 THEN
IF (a/2) <> INT(a/2) THEN
CIRCLE (659-(fes(a)-20)*57+4*a,200),6,11,,,0.9
PAINT (659-(fes(a)-20)*57+4*a,200),a+1,11
ELSE
CIRCLE (663-(fes(a)-20)*57-4*a,200),6,11,,,0.9
PAINT (663-(fes(a)-20)*57-4*a,200),a+1,11
END IF
END IF
IF fes(a)>30 THEN
IF (a/2) <> INT(a/2) THEN
CIRCLE (32+4*a,218-19*(fes(a)-30)),6,11,,,0.9
PAINT (32+4*a,218-19*(fes(a)-30)),a+1,11
ELSE
CIRCLE (36-4*a,218-19*(fes(a)-30)),6,11,,,0.9
PAINT (36-4*a,218-19*(fes(a)-30)),a+1,11
END IF
END IF
NEXT a
RETURN
Menkast:
ob=h*8-13
li=li*8:rr=rr*8
IF li=0 THEN li=170
IF rr=0 THEN rr=448
FOR a=1 TO ap
LINE (li,ob+(a-1)*16)-(rr,ob+a*16),12,b
LINE (li+1,1+ob+(a-1)*16)-(rr+1,1+ob+a*16),1,b
NEXT
GOSUB Sound1
ON MOUSE GOSUB maus.men
MOUSE ON
ma=0
WHILE ma=0
b$=INKEY$
IF VAL(b$)>=1 AND VAL(b$)<= ap THEN a$=b$:ma=1
a=MOUSE(0)
WEND
a=VAL(a$)
MOUSE OFF
li=0:rr=0
RETURN
maus.men:
xma=MOUSE(1)
yma=MOUSE(2)
IF xma>li AND xma<rr THEN
IF yma>ob AND yma<ob+ap*16 THEN a$=STR$(INT((yma-ob)/16)+1):ma=1
END IF
RETURN
requester:
re=2
WINDOW 2,,(xr,yr)-(xr+200,yr+50),18,1
COLOR 10
PRINT
PRINT TAB(3) "Alles klar ?"
COLOR 1
LOCATE 5
PRINT PTAB(42) "OK" PTAB(134) "Nein"
LINE (20 ,27)-(80,43),2,b
LINE (120,27)-(180,43),2,b
LINE (21 ,28)-(81,44),6,b
LINE (121,28)-(181,44),6,b
ON MOUSE GOSUB Maus.requ
MOUSE ON
WHILE re=2
a$=INKEY$
IF a$="o" THEN re=1
IF a$="n" THEN re=0
WEND
MOUSE OFF
WINDOW CLOSE 2
RETURN
Maus.requ:
a=MOUSE(0)
xma=MOUSE(1)
yma=MOUSE(2)
IF yma>27 AND yma<43 THEN
IF xma>20 AND xma<80 THEN PAINT (30,30),7,6 : re=1
IF xma>120 AND xma<180 THEN PAINT (130,30),7,6 : re=0
END IF
RETURN
Lok:
RESTORE Loko
COLOR 12
AREA (x,y):FOR m=1 TO 18:READ a,b:AREA STEP (a,b):NEXT:AREAFILL
AREA (x+18,y-9):FOR m=1 TO 11:READ a,b:AREA STEP (a,b):NEXT:AREAFILL
FOR b=1 TO 2:FOR a=1 TO 2
CIRCLE (INT(x-35+a*10+b*23.5),y+2),3,12,,,0.4
PAINT (INT(x-35+a*10+b*23.5),y+2),12
NEXT a,b
Loko:
DATA -7,,,1,-2,,,-3,2,,,1,5,,-2,-1,-1,-1,,-2,1,-1,3,-1,7,,-2,-5,7,
DATA -2,5,8,0,0,-2,4,2,5,,,-5,10,,,1,-9,,,4,8,,,6,-1,1,-36,
RETURN
Fragz:
FOR a=1 TO 5
CIRCLE (x+7+a,y+6),8,fabe,2,3.4
CIRCLE (x+a,y),10,fabe, 5.5,3,0.4
LINE (x+8+a,y+3)-(x+2+a,y+5),fabe
CIRCLE (x-1+a,y+10),2,fabe
NEXT a
RETURN
Aquakiki:
CIRCLE (x,y),9,6,6.28,1.6,0.35
CIRCLE (x-1,y+3),4,6,6.28,1.6,0.4
LINE (x+10,y)-(x+10,y+5),6
LINE (x+3,y+4)-(x+3,y+5),6
LINE (x+10,y+5)-(x+3,y+5),6
LINE (x-1,y+1)-(x-30,y+1),6
LINE (x-1,y-3)-(x-30,y-3),6
LINE (x-30,y+1)-(x-30,y-3),6
PAINT (x-29,y),6
LINE (x-10,y-3)-(x-12,y-8),6,bf
COLOR 6
AREA (x-11,y-8)
AREA (x-18,y-7)
AREA (x-18,y-10)
AREA (x-11,y-9)
AREA (x-11,y-8)
AREA (x-4,y-7)
AREA (x-4,y-10)
AREA (x-11,y-9)
AREAFILL
RETURN
Glube:
CIRCLE (x,y),8,5,,,0.51
PAINT (x,y),5
LINE (x-4,y+4)-(x+4,y+10),12,bf
LINE (x-3,y+6)-(x+3,y+7),0
LINE (x-3,y+8)-(x+3,y+9),0
LINE (x+1,y+5)-(x+3,y+5),0
LINE (x-3,y+3)-(x+3,y),0,b
LINE (x+15,y-3)-(x+23,y-5),5
LINE (x+18,y+2)-(x+26,y+3),5
LINE (x-15,y-3)-(x-22,y-5),5
LINE (x-14,y+2)-(x-23,y+4),5
RETURN
Maus.Str:
aus=0
kno=MOUSE(0)
xma=MOUSE(1)
yma=MOUSE(2)
IF xma>59 AND xma<77 AND yma>7 AND yma<119 THEN
aus=INT((yma)/8):MOUSE OFF
END IF
IF xma>291 AND xma<309 AND yma>7 AND yma<119 THEN
aus =INT((yma)/8)+14:MOUSE OFF
END IF
sh=me(aus)
RETURN
gadget:
mpr=0
WINDOW 7,,(gx,gy)-(gx+220,gy+64),2,1
FOR a=0 TO 1
LINE (27+a,27) - (47+a,27),1
LINE (37+a,22) - (37+a,32),1
LINE (102+a,27)-(120+a,27),1
NEXT
LOCATE 4,23:PRINT "OK"
fa=7
FOR a=0 TO 2
IF a=2 THEN fa=3
LINE (19+a,16+a) - (56+a,38+a),fa,b
LINE (a+93,16+a) -(130+a,38+a),fa,b
LINE (a+166,16+a)-(203+a,38+a),fa,b
NEXT
Schl:
COLOR 3
LOCATE 7,4:PRINT "Preis : ";pr
kno=MOUSE(0)
kno=MOUSE(0)
ON MOUSE GOSUB Mauspre
MOUSE ON
WHILE mpr=0
a$=INKEY$
IF a$<>"" THEN GOSUB Tastpre
WEND
WINDOW CLOSE 7
RETURN
Tastpre:
IF a$="+" THEN pr=pr+20
IF a$="-"AND pr>=20 THEN pr=pr-20
IF a$="o" THEN mpr=1:MOUSE OFF
LOCATE 7,4:PRINT "Preis : ";pr
RETURN
Mauspre:
WHILE MOUSE(0)<0
kno=MOUSE(0)
xma=MOUSE(1)
yma=MOUSE(2)
IF xma>19 AND xma<56 AND yma>16 AND yma<38 THEN pr=pr+20
IF xma>93 AND xma<130 AND yma>16 AND yma<38 AND pr>=20 THEN pr=pr-20
IF xma>166 AND xma<203 AND yma>16 AND yma<38 THEN mpr=1:MOUSE OFF
LOCATE 7,4:PRINT "Preis : ";pr
WEND
RETURN
acbmloader:
GetNames:
IF (acbmname$ = "") GOTO Mcleanup2
REM - ACBM-Bild laden
loadError$ = ""
GOSUB LoadACBM
IF loadError$ <> "" THEN GOTO Mcleanup
IF acbmname$="spielplan.acbm" THEN
PALETTE 0,0,0,0 'Hintergrund: schwarz
PALETTE 1,1,1,1 'weiß
PALETTE 2,0.2,0.4,1 'dunkelblau
PALETTE 3,1,0.53,0 'orange
PALETTE 4,0,0.7,0.1 'gruen
PALETTE 5,1,1,0.13 'gelb
PALETTE 6,0.35,0.7,1 'hellblau
PALETTE 7,0.9,0.1,0.1 'rot
PALETTE 8,0.5,0.07,0.8 'lila
PALETTE 9,1,0.33,0.95 'hellila
PALETTE 10,0.2,1,0.2 'hellgruen
PALETTE 11,0,0,0 'Vordergrund: schwarz
PALETTE 12,0.6,0.6,0.5 'grau
COLOR dr+1
LOCATE 5,23: PRINT "Spieler : " na$(dr)
COLOR 1
LOCATE 6,23: PRINT "Gewürfelte Zahl :";wu+we;
IF pa > 0 THEN PRINT "(Pasch)";
LOCATE 7,23 : PRINT "Spielfeld : ";fe$(fes(dr));
LOCATE 8,23 : PRINT"Vermögen :";ko(dr)
END IF
Mcleanup:
Mcleanup2:
' Zurueck zum Hauptprogramm
RETURN
LoadACBM:
'" - Folgende Variablen müssen
'" - initialisiert sein:
REM - ACBMname$ (ACBM-Dateiname)
REM - Variablen initialisieren
f$ = acbmname$
fHandle& = 0
mybuf& = 0
foundBMHD = 0
foundCMAP = 0
foundCAMG = 0
foundCCRT = 0
foundABIT = 0
REM - aus include/libraries/dos.h
REM - MODE_NEWFILE = 1006
REM - MODE_OLDFILE = 1005
filename$ = f$ + CHR$(0)
fHandle& = xOpen&(SADD(filename$),1005)
IF fHandle& = 0 THEN
loadError$ = "Eingabedatei nicht gefunden/lesbar."
GOTO Lcleanup
END IF
REM - Pufferspeicherplatz reservieren
ClearPublic& = 65537
mybufsize& = 360
mybuf& = AllocMem&(mybufsize&,ClearPublic&)
IF mybuf& = 0 THEN
loadError$ = "Pufferspeicherplatz nicht verfügbar."
GOTO Lcleanup
END IF
inbuf& = mybuf&
cbuf& = mybuf& + 120
ctab& = mybuf& + 240
REM - Eingabe sollte lauten FORMnnnnACBM
rLen& = xRead&(fHandle&,inbuf&,12)
tt$ = ""
FOR kk = 8 TO 11
tt% = PEEK(inbuf& + kk)
tt$ = tt$ + CHR$(tt%)
NEXT
IF tt$ <> "ACBM" THEN
loadError$ = "Keine ACBM-Grafikdatei."
GOTO Lcleanup
END IF
REM - ACBM-Datei Chunk-weise lesen
ChunkLoop:
REM - Chunk-Name/Länge ermitteln
rLen& = xRead&(fHandle&,inbuf&,8)
icLen& = PEEKL(inbuf& + 4)
tt$ = ""
FOR kk = 0 TO 3
tt% = PEEK(inbuf& + kk)
tt$ = tt$ + CHR$(tt%)
NEXT
IF tt$ = "BMHD" THEN 'BitMap-Header
foundBMHD = 1
rLen& = xRead&(fHandle&,inbuf&,icLen&)
iWidth% = PEEKW(inbuf&)
iHeight% = PEEKW(inbuf& + 2)
idepth% = PEEK(inbuf& + 8)
iCompr% = PEEK(inbuf& + 10)
scrwidth% = PEEKW(inbuf& + 16)
scrheight% = PEEKW(inbuf& + 18)
iRowBytes% = iWidth% /8
scrRowBytes% = scrwidth% / 8
nColors% = 2^(idepth%)
'" - Genug Platz für Videospeicher ?
AvailRam& = FRE(-1)
NeededRam& = ((scrwidth%/8)*scrheight%*(idepth%+1))+5000
IF AvailRam& < NeededRam& THEN
loadError$ = "Speicherplatz reicht nicht aus."
GOTO Lcleanup
END IF
kk = 1
IF scrwidth% > 320 THEN kk = kk + 1
IF scrheight% > 200 THEN kk = kk + 2
'SCREEN 2,scrWidth%,scrHeight%,iDepth%,2
'WINDOW 3,"MONO",,7,2
REM - Adressen von Screen-Structures ermitteln
GOSUB GetScrAddrs
REM - Schirm während Ladevorgang dunkel
CALL LoadRGB4&(sViewPort&,ctab&,nColors%)
ELSEIF tt$ = "CMAP" THEN 'Farbpalette
foundCMAP = 1
rLen& = xRead&(fHandle&,cbuf&,icLen&)
REM - Farbpalette aufbauen
FOR kk = 0 TO nColors% - 1
red% = PEEK(cbuf&+(kk*3))
gre% = PEEK(cbuf&+(kk*3)+1)
blu% = PEEK(cbuf&+(kk*3)+2)
regTemp% = (red%*16)+(gre%)+(blu%/16)
POKEW(ctab&+(2*kk)),regTemp%
NEXT
ELSEIF tt$ = "CAMG" THEN 'Amiga ViewPort Modes
foundCAMG = 1
rLen& = xRead&(fHandle&,inbuf&,icLen&)
camgModes& = PEEKL(inbuf&)
ELSEIF tt$ = "ABIT" THEN 'Contiguous BitMap
foundABIT = 1
'" - Hier werden nur volle BitMaps verarbeitet, keine
'" - Ausschnitte wie z.B. Pinsel (Brushes).
'" - Sehr schnell, liest ganze BitPlanes.
plSize& = (scrwidth%/8) * scrheight%
FOR pp = 0 TO idepth% -1
rLen& = xRead&(fHandle&,bPlane&(pp),plSize&)
NEXT
ELSE
REM - unbekannten Chunk-Typ lesen
FOR kk = 1 TO icLen&
rLen& = xRead&(fHandle&,inbuf&,1)
NEXT
'" - Wenn Länge ungerade, noch 1 Byte lesen
IF (icLen& OR 1) = icLen& THEN
rLen& = xRead&(fHandle&,inbuf&,1)
END IF
END IF
REM - Fertig, wenn alle Chunks gelesen
IF foundBMHD AND foundCMAP AND foundABIT THEN
GOTO GoodLoad
END IF
REM - Lesen ok, nächsten Chunk lesen
IF rLen& > 0 THEN GOTO ChunkLoop
IF rLen& < 0 THEN ' Lesefehler
loadError$ = "Lesefehler."
GOTO Lcleanup
END IF
REM - rLen& = 0 heißt EOF (Dateiende)
IF (foundBMHD=0) OR (foundABIT=0) OR (foundCMAP=0) THEN
loadError$ = "Wichtige IFF-Chunks nicht gefunden."
GOTO Lcleanup
END IF
GoodLoad:
loadError$ =""
REM Farbpalette
IF foundCMAP THEN
CALL LoadRGB4&(sViewPort&,ctab&,nColors%)
END IF
Lcleanup:
IF fHandle& <> 0 THEN CALL xClose&(fHandle&)
IF mybuf& <> 0 THEN CALL FreeMem&(mybuf&,mybufsize&)
RETURN
GetScrAddrs:
REM - Adressen von Screen-Structures ermitteln
sWindow& = WINDOW(7)
sScreen& = PEEKL(sWindow& + 46)
sViewPort& = sScreen& + 44
sRastPort& = sScreen& + 84
sColorMap& = PEEKL(sViewPort& + 4)
colorTab& = PEEKL(sColorMap& + 4)
sBitMap& = PEEKL(sRastPort& + 4)
REM - Screen-Parameter ermitteln
scrwidth% = PEEKW(sScreen& + 12)
scrheight% = PEEKW(sScreen& + 14)
scrDepth% = PEEK(sBitMap& + 5)
nColors% = 2^scrDepth%
REM - Adressen der BitPlanes ermitteln
FOR kk = 0 TO scrDepth% - 1
bPlane&(kk) = PEEKL(sBitMap&+8+(kk*4))
NEXT
RETURN
SAMPLELoader:
OPEN "I",#1,filename$(a)
Laenge&(a)=LOF(1)
CLOSE 1
:
Mem.Opt&=2^1+2^16
Adresse&(a)=AllocMem&(Laenge&(a),Mem.Opt&)
IF Adresse&(a)=0 THEN ERROR 7
:
REM > Datei öffnen <
:
disk.name$=filename$(a)+CHR$(0)
disk.handle&=xOpen&(SADD(disk.name$),1005)
:
REM > Daten lesen <
:
disk.gelesen&=xRead&(disk.handle&,Adresse&(a),Laenge&(a))
:
REM > Datei schließen <
:
CALL xClose&(disk.handle&)
:
RETURN
Soundplayer:
REM > Abspielen <
:
Basis&=&Hdff0*&H100
DMA&=Basis&+&H96
AUDADR&=Basis&+&Ha0
AUDLEN&=Basis&+&Ha4
AUDSPD&=Basis&+&Ha6
AUDVOL&=Basis&+&Ha8
POKEL AUDADR&,Adresse&(num)
POKEW AUDLEN&,Laenge&(num)/2
POKEW AUDSPD&,peri
POKEW AUDVOL&,64
POKEW DMA&,&H8201
:
REM > Warten <
:
IF num=1 THEN FOR t=1 TO 2000:NEXT t
IF num=2 THEN FOR t=1 TO 6300:NEXT t
IF num=3 THEN FOR t=1 TO 12000:NEXT t
:
REM > Sound stoppen <
:
POKEW DMA&,&H1
:
RETURN
Sound1:
num=1
peri=180
GOSUB Soundplayer
RETURN
sound2:
num=2
peri=428
GOSUB Soundplayer
RETURN